package org.jsola.hr.service;

import org.jsola.hr.dto.NoticeRuleSettingDTO;
import org.jsola.hr.vo.HrNoticeGroupListVO;
import org.jsola.notice.vo.NoticeGroupListVO;
import org.jsola.user.core.TokenUser;

import java.util.List;

/**
 * 消息通知
 *
 * @author wcl
 */
public interface INoticeService {
    /**
     * 查询站点下通知分组和详情信息
     *
     * @param companyId 公司id
     * @param tokenUser 当前用户
     * @return 通知分组列表信息
     */
    List<HrNoticeGroupListVO> listAllByCompanyId(String companyId, TokenUser tokenUser);


    /**
     * 查询所有通知分组
     *
     * @param tokenUser  当前用户
     * @return 通知分组列表信息
     */
    List<HrNoticeGroupListVO> listAllGroup(TokenUser tokenUser);

    /**
     * 新增或更新消息提醒规则设置
     *
     * @param noticeRuleSettingDTO 消息提醒规则设置新增实体
     * @param tokenUser            当前用户
     */
    void saveOrUpdateNoticeRuleSetting(NoticeRuleSettingDTO noticeRuleSettingDTO, TokenUser tokenUser);

    /**
     * 开启消息提醒规则设置
     *
     * @param id        消息提醒规则设置id
     * @param tokenUser 当前用户
     * @return 开启数量
     */
    int openNoticeRuleSetting(Long id, TokenUser tokenUser);

    /**
     * 关闭消息提醒规则设置
     *
     * @param id        消息提醒规则设置id
     * @param tokenUser 当前用户
     * @return 关闭数量
     */
    int closeNoticeRuleSetting(Long id, TokenUser tokenUser);

    /**
     * 初始化所有的用工单位的通知规则设置
     *
     * @param tokenUser 当前用户
     * @return 成功数量
     */
    Integer initAllCompany(TokenUser tokenUser);

    /**
     * 将n_notice_rule_setting表的userId处理为json数据
     *
     * @return 修改数量
     */
    Integer updateNoticeRuleSetting();

    /**
     * 甲方端首页消息通知统计
     *
     * @param tokenUser 当前用户
     * @return 统计结果
     */
    List<HrNoticeGroupListVO> jfHomePageNotice(TokenUser tokenUser);
}
